//
// connection_manager.hpp
// ~~~~~~~~~~~~~~~~~~~~~~
//
// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//

#ifndef HTTP_CONNECTION_MANAGER_HPP
#define HTTP_CONNECTION_MANAGER_HPP

#include "connection.hh"

#include <set>

namespace http {

namespace server {

/**
 * Manages open connections so that they may be cleanly stopped when the server
 * needs to shut down.
 */
class connection_manager {
public:
    /**
     * Construct a connection manager.
     *
     */
    connection_manager();

    connection_manager(const connection_manager&) = delete;
    connection_manager& operator=(const connection_manager&) = delete;

    /**
     * Add the specified connection to the manager and start it.
     *
     * @param c the connection pointer
     */
    void start(connection_ptr c);

    /**
     * Stop the specified connection.
     *
     * @param c the connection pointer
     */
    void stop(connection_ptr c);

    /**
     * Stop all connections.
     *
     */
    void stop_all();

private:
    /**
     * The managed connections.
     *
     */
    std::set<connection_ptr> connections_;
};

} // namespace server

} // namespace http

#endif // HTTP_CONNECTION_MANAGER_HPP
